package com.mixsmart.web.controller;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.mixsmart.commonweb.bean.entity.TCOperateFlag;
import com.mixsmart.commonweb.bean.entity.TCUrlResource;
import com.mixsmart.commonweb.service.impl.OperateFlagService;
import com.mixsmart.commonweb.service.impl.UrlResourceService;
import com.mixsmart.core.bean.MixResponse;
import com.mixsmart.core.service.IResQueryService;
import com.mixsmart.enums.YesNoType;
import com.mixsmart.spellsql.utils.Cnd;
import com.mixsmart.spellsql.utils.Exp;
import com.mixsmart.utils.StringUtils;

/**
 * URL资源管理--控制器
 * @author lmq
 * @version 1.0
 * @since JDK版本大于等于1.6
 * 2016年3月7日
 */
@Controller
@RequestMapping("/url/resource")
public class UrlResourceController extends BaseWebController {

	private static final String VIEW_DIR = WEB_BASE_VIEW_DIR+"/urlResource/";
	
	@Autowired
	private UrlResourceService urlResServ;
	@Autowired
	private OperateFlagService operateFlagServ;
	@Autowired
	private IResQueryService resQueryServ;
	
	/**
	 * 添加资源视图
	 * @return 返回添加资源页面
	 */
	@RequestMapping("/add.do")
	public ModelAndView add() {
		ModelAndView modelView = new ModelAndView();
		ModelMap modelMap = modelView.getModelMap();
		List<TCOperateFlag> opFlags = operateFlagServ.finds(Cnd.where(Exp.eq("state", YesNoType.YES.getIndex())).order(Exp.asc("sortNum")));
		modelMap.put("opFlags", opFlags);
		modelView.setViewName(VIEW_DIR+"add");
		return modelView;
	}
	
	/**
	 * 保存URL资源数据
	 * @param urlResource 数据对象
	 * @return 返回MixResponse对象的JSON格式数据；如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping(value="/save.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> save(TCUrlResource urlResource) {
		MixResponse<String> mixResp = new MixResponse<String>();
		mixResp.setMsg("资源添加失败");
		logger.debug("保存资源数据---");
		if(null != urlResource && StringUtils.isNotEmpty(urlResource.getName()) 
				&& StringUtils.isNotEmpty(urlResource.getUrl())) {
			try {
				if(urlResServ.save(urlResource)) {
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg("资源添加成功");
					mixResp.setData(urlResource.getId());
					logger.debug("保存资源数据---[成功]---");
				} else {
					logger.error("保存资源数据---[失败]---");
				}
			} catch (Exception e) {
				e.printStackTrace();
				logger.error("保存资源数据---[异常]---["+e.getMessage()+"---]");
			}
		}
		return mixResp;
	}
	
	/**
	 *编辑URL资源数据
	 * @param id URL资源ID
	 * @return URL资源编辑视图
	 */
	@RequestMapping(value="/edit.do",method=RequestMethod.GET)
	public ModelAndView edit(String id) {
		ModelAndView modelView = new ModelAndView();
		if(StringUtils.isNotEmpty(id)) {
			modelView.getModelMap().put("objBean", urlResServ.find(id));
			HashMap<String, Object> params = new HashMap<String, Object>();
			params.put("urlResId", id);
			MixResponse<Object> mixResp = resQueryServ.getDatas("edit_url_res_op_flag", params);
			modelView.getModelMap().put("mixResp", mixResp);
		}
		modelView.setViewName(VIEW_DIR+"edit");
		return modelView;
	}
	
	
	/**
	 * 更新URL资源数据
	 * @param urlResource 数据对象
	 * @return 返回MixResponse对象的JSON格式数据；如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping(value="/update.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> update(TCUrlResource urlResource) {
		MixResponse<String> mixResp = new MixResponse<String>();
		mixResp.setMsg("资源修改失败");
		logger.debug("更新资源数据---");
		if(null != urlResource && StringUtils.isNotEmpty(urlResource.getId()) 
				&& StringUtils.isNotEmpty(urlResource.getName()) 
				&& StringUtils.isNotEmpty(urlResource.getUrl())) {
			try {
				if(urlResServ.update(urlResource)) {
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg("资源修改成功");
					mixResp.setData(urlResource.getId());
					logger.debug("更新资源数据---[成功]--");
				} else {
					logger.error("更新资源数据---[失败]---");
				}
			} catch (Exception e) {
				e.printStackTrace();
				logger.error("更新资源数据---[异常]---["+e.getMessage()+"]--");
			}
		}
		return mixResp;
	}
	
	/**
	 * 删除URL资源数据
	 * @param id URL资源ID；多个ID之间用英文逗号“,”分隔
	 * @return 返回MixResponse对象的JSON格式数据；如果成功result等于“1”，负责result为非1值
	 */
	@RequestMapping(value="/delete.do",method=RequestMethod.POST)
	@ResponseBody
	public MixResponse<String> delete(String id) {
		MixResponse<String> mixResp = new MixResponse<String>();
		mixResp.setMsg("资源删除失败");
		logger.debug("正在删除资源---");
		if(StringUtils.isNotEmpty(id)) {
			String[] ids = id.split(MULTI_VALUE_SPLIT);
			try {
				if(urlResServ.delete(ids)) {
					mixResp.setResult(OP_SUCCESS);
					mixResp.setMsg("资源删除成功");
					logger.debug("删除资源---[成功]---");
				} else {
					logger.error("删除资源---[失败]---");
				}
			} catch (Exception e) {
				e.printStackTrace();
				logger.error("删除资源---[异常]---["+e.getMessage()+"]--");
			}
		}
		return mixResp;
	}
}
